Graphs are commonly used in computer science to represent a number of different structures. Informally, a graph consists of a set of objects (nodes or vertices) with corresponding connections (arcs or edges). Each arc may also be assigned a direction; in this case, the arc is used to move from a (source) node to a (target) node.
An example of structure that can be represented as a graph is the complex of models that are generally defined during the process of developing computer software (such as large software applications). Each model consists of an abstraction, which provides a simplified representation of the corresponding real artifact to be built. Preferably, the models are defined by using the Unified Modeling Language (UML). The UML is a standard modeling language, which provides the (graphical and textual) syntax and the underlying semantic for specifying all the aspects relating to the development process (especially for computer software of the object-oriented type). Several modeling tools are available in the art for this purpose; generally, a modeling tool provides an Integrated Development Environment (IDE) for supporting the various phases relating to the building of each software application (for example, its requirement definition, architectural design, code specification, and the like). A very popular example of commercial modeling tool is the “Rational Rose” by IBM Corporation.
The models aid software developers to master the inherent complexity of the development process. Particularly, in this way it is possible to visualize, assess and communicate the software application before its actual realization (so as to reduce the risks of the corresponding development). Moreover, the models may be used to create and maintain the code of the software application in a very simple, safe and time effective manner.
A problem in the modeling of computer software is the proliferation of artifacts that are generated during the development process. Indeed, a complex software application generally involves the definition of multiple models, typically based on the contributions of different developers (such as functional models, object models, or dynamic models). In turn, each model is represented by a number of diagrams (such as use case, class, object, deployment, sequence, activity, collaboration, or statechart diagrams). As a result, the available information may be very confusing.
In order to help readers to move among the diagrams, most modeling tools generally allow inserting hyperlinks into the diagrams. Each hyperlink in a generic diagram automatically fetches another diagram and then causes its displaying. In this way, the diagrams may be organized into a graph (which may be traversed from one diagram to another by means of the available hyperlinks).
However, each diagram will generally include several hyperlinks (to diagrams of either the same model or other models) that have been inserted by the different developers (such as end-users, architects, designers, and programmers). Therefore, the resulting structure is very chaotic.
In any case, the hyperlinks must be hard-coded in the desired diagrams. Therefore, this operation is time-consuming; moreover, any change requires updating the definition of the corresponding diagram and it is then prone to errors.
Those drawbacks are particularly acute in the development process of complex software applications, which are intended to run in a multi-tier and heterogeneous environment (for example, with distributed architecture or to be integrated in other systems).
All of the above reduces the effectiveness of the modeling process. This may have a detrimental impact on the yield of the whole development process (thereby increasing its length and cost) and on the quality of the resulting software applications.